import streamlit as st
import pandas as pd
import altair as alt
# Carregar o dataset
try:
df = pd.read_csv("DataCirclePodcast.csv", sep=',')
except FileNotFoundError:
st.error("The file 'DataCirclePodcast.csv' was not found. Please upload the correct file.")
st.stop()
# Título do app
st.title("AE MeetUp - Building an App with Streamlit")
# Mensagem inicial
st.markdown(
"""
Hello, MAE! Let's start this adventure?
"""
)
# Mostrar o DataFrame
st.header("Reading the Dataset")
st.dataframe(df)
# Verificar se as colunas necessárias existem no DataFrame
if "Título do episódio" in df.columns and "Reproduções" in df.columns:
# Adicionar filtro de lista suspensa
st.subheader("Filter by Episode Title")
selected_episode = st.selectbox(
"Select an episode to filter:",
options=["All"] + df["Título do episódio"].drop_duplicates().tolist()
)
# Filtrar o DataFrame com base na seleção
if selected_episode != "All":
filtered_df = df[df["Título do episódio"] == selected_episode]
else:
filtered_df = df
# Criar o gráfico de barras com Altair
if not filtered_df.empty:
chart = (
alt.Chart(filtered_df)
.mark_bar()
.encode(
y=alt.X("Título do episódio", title="Episode Title", sort='-x'), # Ordenação decrescente
x=alt.Y("Reproduções:Q", title="Reproductions"), # Quantidade de reproduções no eixo X
tooltip=["Título do episódio", "Reproduções"] # Exibição do tooltip com o título do episódio e as reproduções
)
.mark_bar()
.encode(
text="Reproduções:Q" # Adiciona o rótulo com a quantidade de reproduções em cada barra
)
.properties(
width=800, # Largura do gráfico
height=400, # Altura do gráfico
title="Reproductions per Episode"
)
)
chart.configure_text(
align='center',
baseline='middle',
fontSize=12,
dx=0, # Ajuste horizontal do texto
dy=-10 # Ajuste vertical do texto para ficar acima da barra
)
# Exibir o gráfico
st.altair_chart(chart, use_container_width=True)
else:
st.warning("No data to display for the selected episode.")
else:
st.error("The dataset must have columns named 'Título do episódio' and 'Reproduções'.")
media_curtidas = df[["Estúdio","Curtidas"]].dropna().groupby("Estúdio").mean()
st.write("Média de Curtidas por:")
col1, col2, col3, col4 = st.columns(4)
with col1:
st.metric(label="Qtde Gravada em Estúdio", value= df.loc[df["Estúdio"] == "Sim"].shape[0])
with col2:
st.metric(label="Média de Curtidas Estúdio", value= media_curtidas.at["Sim","Curtidas"])
with col3:
st.metric(label="Qde Gravada fora de Estúdio", value= df.loc[df["Estúdio"] == "Não"].shape[0])
with col4:
st.metric(label="Médias de Curtidas Fora de Estúdio", value= media_curtidas.at["Não","Curtidas"])
st.title("Ter convidados externos, afeta a quantidade de curtidas?")
# Gráfico de linha segmentado por 'convidado'
chart = (
alt.Chart(df)
.mark_line() # Tipo do gráfico: linha
.encode(
x='Hora de publicação (UTC):T', # Eixo X: Dia (tipo temporal)
y='Curtidas:Q', # Eixo Y: Curtidas (quantitativo)
color='Convidado Externo?:N', # Segmentação por 'convidado' (Sim ou Não)
tooltip=['dia:T', 'Curtidas:Q', 'Convidado Externo?:N'] # Exibindo os valores no tooltip
)
.properties(
title='Evolução das Curtidas por Convidado Externo',
width=600,
height=400
)
)
# Exibindo o gráfico no Streamlit
st.altair_chart(chart)
# Final Message
st.title("Now it's your time!")
# Final Message2
st.markdown(
"""
Use your creativity, the streamlit library, and your BFF, Chat GPT, to help you develop an amazing app!
"""
)